GoでWebサイト作る


概要

このへんを見て学ぶ

https://blog.a-know.me/entry/2017/12/26/234528


最終的にはDockerとかでやろう。



GOROOTってなーに

Goのインストールパス。


GOPATHってなーに

プロジェクト置き場。

ここの下に置かないといけないのなんでなんだろ、ちょっとわからんので調べよう。

-> workspaceだからとのこと。なるほど。



go install コマンドは何をしてるの?

binフォルダ以下にバイナリができる。

パッケージのコンパイルと依存性解決、というのがinstallコマンドの役割ぽい。



go build

goのコードをその場でビルドできる。依存性解決とかやるにはgo getとかやる必要がある。

installはそのへんを自動化してくれるのかな。


http://imagawa.hatenadiary.jp/entry/2016/12/24/190000

-> 正解っぽい。



ChitChat編


コードがすでに完成されているものを見るしかないのがわかった。どうやって切り捨てていこうかなー。

git化した。



続きをやっていく、そろそろDBに入る!

ここでいうThreadとは多言語のスレッドのことではなくチャットのスレッドのこと。

Postgressapp入れてpostgress動かす。


Postgressapp.comからDL、


export PATH=$PATH:/Applications/Postgres.app/Contents/Versions/latest/bin


で接続できるように。

psql --version

psql (PostgreSQL) 12.1


Postgress.app上でInitializeってやると初期化開始できた。


createdb chitchat 

をコマンドラインで実行した結果、

スクリーンショット 2019-11-29 10.05.00.png

こんな感じになった。

で、次のsetup.sqlファイルをpsqlコマンドで実行すると、-dで設定したデータベースに対してsql文が発行される。


psql -f data/setup.sql -d chitchat


drop table posts;

drop table threads;

drop table sessions;

drop table users;



create table users

(

  id serial primary key,

  uuid varchar(64) not null unique,

  name varchar(255),

  email varchar(255) not null unique,

  password varchar(255) not null,

  created_at timestamp not null

);


create table sessions

(

  id serial primary key,

  uuid varchar(64) not null unique,

  email varchar(255),

  user_id integer references users(id),

  created_at timestamp not null

);


create table threads

(

  id serial primary key,

  uuid varchar(64) not null unique,

  topic text,

  user_id integer references users(id),

  created_at timestamp not null

);


create table posts

(

  id serial primary key,

  uuid varchar(64) not null unique,

  body text,

  user_id integer references users(id),

  thread_id integer references threads(id),

  created_at timestamp not null

);

users, sessions, threads, postsなどのテーブルが作成される。

それぞれidがあって、みたいな構造になってる。


で、これにアクセスするDbインスタンスを作る。

db connect errsql: unknown driver "postgres" (forgotten import?)


コードを実行するとこんな感じのエラーが出た。

で、すでにimportされてるdatabase/sqlはこれ汎用SQLのドライバーで、その下層に位置するべきpostgresのドライバがimportされてなかった。

go get github.com/lib/pq


で解決した。importだと解決できなかった(解決されなかった)のなんでだろう。



DBについて

https://qiita.com/H-A-L/items/fe8cb0e0ee0041ff3ceb

ここをみてポスグレについて学んでいる。


/Applications/Postgres.app/Contents/Versions/12/bin/psql -p5432 “chitchat”

みたいなコマンドでchitchat DBにログイン、


select * from users;


とかでユーザー一覧を取得。


chitchat=# select * from users;

 id |                 uuid                 | name | email |                 password                 |         created_at         

----+--------------------------------------+------+-------+------------------------------------------+----------------------------

  1 | 31467eda-ae54-47e6-5a41-25cbee98e6ad | a    | a@a.a | df51e37c269aa94d38f93e537bf6e2020b21406c | 2019-12-04 15:44:49.768178


こんな風に取得できる。あとは条件をいろいろorder byとかで決めれば良さそう。語句はぜんぜん覚えられないな、、へんな法則してそう。



Queryについて、

err = Db.QueryRow("select id, uuid, email, user_id, created_at from sessions where uuid = $1", session.UUID).Scan(&session.ID, &session.UUID, &session.Email, &session.UserID, &session.CreatedAt)


こんな感じに書くと、from句の前に書いた情報のうち、where句に該当する = uuidが指定したものと一致するデータが取得でき、Scanメソッドで代入させられる。


さて、privateには入れた = ログインの概念が理解できたんで、次いってみよう。スレッドどうやって作るの? UI足りてなくない?

-> テンプレートエンジンにcontentを足すと表示できた。生成もOK。



で、ここからどうするか。とりあえず全体を流し読みしよう。